package com.example.stuwork.service;

import com.example.stuwork.common.Result;
import com.example.stuwork.pojo.Submission;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 作业提交服务接口
 */
public interface SubmissionService {
    
    /**
     * 获取所有作业提交记录
     * 
     * @return 提交记录列表结果
     */
    Result<List<Submission>> getAllSubmissions();
    
    /**
     * 根据ID获取提交记录详情
     * 
     * @param submissionId 提交记录ID
     * @return 提交记录详情结果
     */
    Result<Submission> getSubmissionById(Long submissionId);
    
    /**
     * 根据作业ID获取提交记录列表
     * 
     * @param assignmentId 作业ID
     * @return 提交记录列表结果
     */
    Result<List<Submission>> getSubmissionsByAssignmentId(Long assignmentId);
    
    /**
     * 根据学生ID获取提交记录列表
     * 
     * @param studentId 学生ID
     * @return 提交记录列表结果
     */
    Result<List<Submission>> getSubmissionsByStudentId(String studentId);
    
    /**
     * 根据作业ID和学生ID获取提交记录
     * 
     * @param assignmentId 作业ID
     * @param studentId 学生ID
     * @return 提交记录结果
     */
    Result<Submission> getSubmissionByAssignmentIdAndStudentId(Long assignmentId, String studentId);
    
    /**
     * 根据作业ID和状态获取提交记录列表
     * 
     * @param assignmentId 作业ID
     * @param status 状态（0-未批改，1-已批改）
     * @return 提交记录列表结果
     */
    Result<List<Submission>> getSubmissionsByAssignmentIdAndStatus(Long assignmentId, Integer status);
    
    /**
     * 根据教师ID获取需要批改的提交记录列表
     * 
     * @param teacherId 教师ID
     * @return 提交记录列表结果
     */
    Result<List<Submission>> getSubmissionsForGradingByTeacherId(String teacherId);
    
    /**
     * 添加提交记录
     * 
     * @param submission 提交记录信息
     * @param file 提交文件
     * @return 添加结果
     */
    Result<Submission> addSubmission(Submission submission, MultipartFile file);
    
    /**
     * 更新提交记录
     * 
     * @param submission 提交记录信息
     * @return 更新结果
     */
    Result<Submission> updateSubmission(Submission submission);
    
    /**
     * 批改作业
     * 
     * @param submissionId 提交记录ID
     * @param score 分数
     * @param feedback 反馈
     * @param teacherId 批改教师ID
     * @return 批改结果
     */
    Result<Submission> gradeSubmission(Long submissionId, Integer score, String feedback, String teacherId);
    
    /**
     * 批量下载提交文件
     * 
     * @param assignmentId 作业ID
     * @param response HTTP响应
     * @return 下载结果
     */
    Result<String> downloadSubmissionFiles(Long assignmentId, HttpServletResponse response);
    
    /**
     * 导出作业提交记录
     * 
     * @param assignmentId 作业ID
     * @param response HTTP响应
     * @return 导出结果
     */
    Result<String> exportSubmissions(Long assignmentId, HttpServletResponse response);
    
    /**
     * 删除提交记录
     * 
     * @param submissionId 提交记录ID
     * @return 删除结果
     */
    Result<Boolean> deleteSubmission(Long submissionId);
    
    /**
     * 获取提交状态统计
     * 
     * @param assignmentId 作业ID
     * @return 统计结果
     */
    Result<Map<String, Object>> getSubmissionStats(Long assignmentId);
} 